home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- set -e
- export LC_ALL=C
-
- if [ "$1" = upgrade ]
- then
- if dpkg --compare-versions "$2" le 2.2.2-4 && test -e /lib/libdb.so.3; then
- # Make upgrades to newer libdb.so.3 easier
- cat /lib/libdb.so.3 > /lib/libdb.so.3.old
- fi
- if dpkg --compare-versions "$2" le 2.1.1-0.1; then
- if [ -f /var/run/utmpd.pid ]; then
- if kill -s TERM `cat /var/run/utmpd.pid` > /dev/null 2>&1
- then
- if [ -f /var/run/utmp ]; then
- cp /dev/null /var/run/utmp
- if grep '^utmp:' /etc/group; then
- chown root:utmp /var/run/utmp
- chmod 664 /var/run/utmp
- else
- chown root:root /var/run/utmp
- chmod 644 /var/run/utmp
- fi
- fi
- if [ -f /var/log/wtmp ]; then
- savelog /var/log/wtmp
- touch /var/log/wtmp
- if grep '^utmp:' /etc/group; then
- chown root:utmp /var/log/wtmp
- chmod 664 /var/log/wtmp
- else
- chown root:root /var/log/wtmp
- chmod 644 /var/log/wtmp
- fi
- fi
- rm -f /etc/init.d/utmpd
- update-rc.d utmpd remove > /dev/null
- fi
- fi
- if [ -f /var/run/utmpx ]; then rm -f /var/run/utmpx; fi
- if [ -f /var/log/wtmpx ]; then rm -f /var/log/wtmpx*; fi
- if [ -e /var/run/utmpd.ro ]; then rm -f /var/run/utmpd.ro; fi
- if [ -e /var/run/utmpd.rw ]; then rm -f /var/run/utmpd.rw; fi
- fi
-
- # NSS authentication trouble guard
- if dpkg --compare-versions $2 lt 2.3.5-1; then
- check="xdm kdm gdm postgresql xscreensaver"
- # Only get the ones that are installed, and configured
- service=$(dpkg -s $check 2> /dev/null | awk 'BEGIN{RS="\n\n";FS="\n"}{if ( $2 ~ /Status: .* installed$/ ) { print $1 } }' | cut -f 2 -d ' ')
-
- echo
- echo "Name Service Switch update in the C Library: pre-installation question."
- echo
- echo "Running services and programs that are using NSS need to be restarted,"
- echo "otherwise they might not be able to do lookup or authentication any more."
- echo "The installation process is able to restart some services (such as ssh or"
- echo "telnetd), but other programs cannot be restarted automatically. One such"
- echo "program that needs manual stopping and restart after the glibc upgrade by"
- echo "yourself is xdm - because automatic restart might disconnect your active"
- echo "X11 sessions."
- echo
- echo "Known packages that need to be stopped before the glibc upgrade are:"
- echo " $check"
- echo
-
- if [ -n "$service" ]; then
- echo "This script detected the following installed services which must be"
- echo "stopped before the upgrade:"
- echo " $service"
- else
- echo "This script did not detect any installed services which need to be"
- echo "stopped."
- fi
- echo
- echo "If you want to interrupt the upgrade now and continue later, please"
- echo "answer No to the question below."
- echo
- frontend=`echo "$DEBIAN_FRONTEND" | tr '[:upper:]' '[:lower:]'`
- if [ "$frontend" = noninteractive ]; then
- echo "Non-interactive mode, upgrade glibc forcibly"
- answer=yes
- else
- echo -n "Do you want to upgrade glibc now? [Y/n] "
- read answer
- case $answer in
- Y*|y*) answer=yes ;;
- N*|n*) answer=no ;;
- *) answer=yes ;;
- esac
- fi
- echo
- if [ "$answer" = no ]; then
- echo "Stopped glibc upgrade. Please retry the upgrade after you have"
- echo "checked or stopped services by hand."
- exit 1
- fi
- fi
-
- # This will keep us from using hwcap libs (optimized) during an
- # upgrade.
- touch /etc/ld.so.nohwcap
- echo glibc >> /etc/ld.so.nohwcap
- fi
-
- # Sanity check.
- # If there are versions of glibc outside of the normal installation
- # location (/lib, /lib64, etc.) then things may break very badly
- # as soon as ld.so is replaced by a new version. This check is not
- # foolproof, but it's pretty accurate. This script ignores libraries
- # with different sonames, and libraries incompatible with the
- # to-be-installed ld.so.
-
- check_dirs () {
- for dir in $*; do
- # Follow symlinks
- dirlink=$(readlink -f $dir)
- [ -n "$dirlink" ] && dir=$dirlink
-
- # Handle /lib in LD_LIBRARY_PATH.
- if expr $dir : "/lib.*" > /dev/null; then
- continue
- fi
- # Skip ia32-libs package on ia64, and similar libraries
- # (not sure why these get added to /etc/ld.so.conf)
- if expr $dir : "/emul/.*" > /dev/null; then
- continue
- fi
- if test -d $dir; then
- output=$(ls $dir | egrep '^(libc.so.6|libm.so.6|libpthread.so.0|librt.so.1|libdl.so.2)$' 2>/dev/null)
-
- if test -n "$output"; then
- # See if the found libraries are compatible with the system ld.so;
- # if they aren't, they'll be ignored. Check e_ident, e_type (which
- # will just be ET_DYN), and e_machine. If a match is found, there
- # is a risk of breakage.
- for lib in $output
- do
- if test -f "$dir/$lib"; then
- libbytes=`head -c 20 $dir/$lib | od -c`
- if test "$ldbytes" = "$libbytes"; then
- echo "Matching libraries: $dir/$lib"
- return 0
- fi
- fi
- done
- fi
- fi
- done
- return 1
- }
-
- if [ "$1" != abort-upgrade ]
- then
- ldbytes=`head -c 20 /lib/ld-linux.so.2 | od -c`
- dirs="/lib32 /lib64 /usr/local/lib /usr/local/lib32 /usr/local/lib64"
- if ! test -L /usr; then
- dirs="$dirs /usr/lib /usr/lib32 /usr/lib64"
- fi
- if check_dirs $dirs; then
- echo
- echo "A copy of glibc was found in an unexpected directory."
- echo "It is not safe to upgrade the C library in this situation;"
- echo "please remove that copy of the C library and try again."
- echo "Please check: https://launchpad.net/bugs/81125"
- # exit 1
- fi
-
- if test -n "$LD_LIBRARY_PATH"; then
- dirs=$(echo $LD_LIBRARY_PATH | sed 's/:/ /')
- if check_dirs $dirs; then
- echo
- echo "Another copy of the C library was found via LD_LIBRARY_PATH."
- echo "It is not safe to upgrade the C library in this situation;"
- echo "please remove the directory from LD_LIBRARY_PATH and try again."
- echo "Please check: https://launchpad.net/bugs/81125"
- # exit 1
- fi
- fi
- if test -e /etc/ld.so.conf; then
- dirs=$(echo $(cat /etc/ld.so.conf))
- if check_dirs $dirs; then
- echo
- echo "Another copy of the C library was found via /etc/ld.so.conf."
- echo "It is not safe to upgrade the C library in this situation;"
- echo "please remove the directory from /etc/ld.so.conf and try again."
- echo "Please check: https://launchpad.net/bugs/81125"
- # exit 1
- fi
- fi
- fi
-
- if [ "$1" != abort-upgrade ] && [ "`uname -s`" = Linux ]
- then
- # glibc kernel version check: KERNEL_VERSION_CHECK
- kernel_compare_versions () {
- verA=$(($(echo "$1" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 10000 + \2 \* 100 + \3/')))
- verB=$(($(echo "$3" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 10000 + \2 \* 100 + \3/')))
-
- test $verA -$2 $verB
- }
-
- exit_check () {
-
- exit 1
- }
-
- # Test to make sure z < 255, in x.y.z-n form of kernel version
- # Also make sure we don't trip on x.y.zFOO-n form
- #kernel_rev=$(uname -r | tr -- - . | cut -d. -f3 | tr -d '[:alpha:]')
- kernel_rev=$(uname -r | sed 's/\([0-9]*\.[0-9]*\.\)\([0-9]*\)\(.*\)/\2/')
- if [ "$kernel_rev" -ge 255 ]
- then
- echo WARNING: Your kernel version indicates a revision number
- echo of 255 or greater. Glibc has a number of built in
- echo assumptions that this revision number is less than 255.
- echo If you\'ve built your own kernel, please make sure that any
- echo custom version numbers are appended to the upstream
- echo kernel number with a dash or some other delimiter.
-
- exit_check
- fi
-
- # sanity checking for the appropriate kernel on each architecture.
- realarch=`uname -m`
- kernel_ver=`uname -r`
-
- # convert "armv4l" and similar to just "arm", and "mips64" and similar
- # to just "mips"
- case $realarch in
- arm*) realarch="arm";;
- mips*) realarch="mips";;
- esac
-
-
- # intel i386 requires a recent kernel
- if [ "$realarch" = i386 ]
- then
- # From glibc 2.3.5-7 and linux-2.6 2.6.12-1, real-i386 is dropped.
- #if kernel_compare_versions "$kernel_ver" lt 2.4.24
- #then
- echo WARNING: This machine has real i386 class processor.
- echo Debian etch and later does not support such old hardware
- echo any longer.
- echo The reason is that \"bswap\" instruction is not supported
- echo on i386 class processors, and some core libraries have
- echo such instruction. You\'ll see illegal instruction error
- echo when you upgrade your Debian system.
- exit_check
- #fi
- fi
-
- # The GNU libc requires 2.6 kernel (except on m68k) because we drop to
- # support linuxthreads
- if [ "$realarch" != m68k ]
- then
- if kernel_compare_versions "$kernel_ver" lt 2.6.0
- then
- echo WARNING: POSIX threads library NPTL requires 2.6 and
- echo later kernel. If you use 2.4 kernel, please upgrade your
- echo kernel before installing glibc.
- exit_check
- fi
- fi
-
- # The GNU libc is now built with --with-kernel= >= 2.4.1 on m68k
- if [ "$realarch" = m68k ]
- then
- if kernel_compare_versions "$kernel_ver" lt 2.4.1
- then
- echo WARNING: This version of glibc requires that you be running
- echo kernel version 2.4.1 or later. Earlier kernels contained
- echo bugs that may render the system unusable if a modern version
- echo of glibc is installed.
- exit_check
- fi
- fi
-
- fi
-
-
-
- exit 0
-